package vip.liux.contracts.security.sms;

import java.time.Duration;
import java.util.Map;

public interface CaptchaCache {

    /**
     * 将验证码放入缓存，并设置过期时间。
     *
     * @param phone  与验证码关联的电话号码
     * @param code   验证码
     * @param expire 验证码的过期时间
     */
    void putCodeInCache(String phone, String code, Duration expire);

    /**
     * 从缓存中获取指定电话号码的验证码。
     *
     * @param phone 与验证码关联的电话号码
     * @return 包含验证码及其元数据的映射，如果未找到或已过期则返回 null
     */
    Map<String, String> getCodeFromCache(String phone);

    /**
     * 增加指定电话号码的错误次数。
     *
     * @param phone 与验证码关联的电话号码
     */
    void errorTimesIncrement(String phone);

    /**
     * 从缓存中移除指定电话号码的验证码。
     *
     * @param phone 与验证码关联的电话号码
     */
    void removeCodeFromCache(String phone);
}